﻿#ifndef CPLCITEMCONTACT_H
#define CPLCITEMCONTACT_H

#include <stdint.h>
#include <QString>

#include "IPlcBaseItem.h"
#include "SPlcGlobalDefine.h"

// PLC基础图元： 触点
class CPlcItemContact : public IPlcBaseItem
{
    Q_OBJECT
public:
    explicit CPlcItemContact(const QRectF &rect,
                             const int8_t type,
                             const QString &str,
                             IPlcBaseItem *parent = NULL);
    ~CPlcItemContact();

    //继承自QGraphicsItem设定绘图边界
    QRectF boundingRect() const override;
    //绘制图元图像函数
    void paint(QPainter *painter,
               const QStyleOptionGraphicsItem *option,
               QWidget *widget = 0) override;

    //获取可编辑状态使能
    bool getEditEnb() override;
    //获取可选中状态使能
    bool getSelectActiveEnb() override;
    //获取选中状态
    bool getSelectActive() override;
    //设置选中状态
    void setSelectActive(bool status) override;

    //设置前置信号接通状态
    void setLastSwitchOn(bool value) override;
    //设置信号接通状态
    void setSwitchOn(bool value) override;

    //获取元件类型
    int8_t getItemType() override;
    //设置元件类型
    void setItemType(int8_t type) override;

    //设置元件变量编号
    QString getVariableNum() override;
    //设置元件变量编号
    void setVariableNum(const QString &str) override;

    //获取边界大小
    QRectF getRect() override;
    //设置边界大小
    void setRect(const QRectF &rect) override;

    //获取分支
    IPlcBaseItem *getBranch() override;
    //设置分支
    void setBranch(IPlcBaseItem *item) override;
    //删除分支
    void deleteBranch() override;

    //是否允许包含注释块
    bool haveComment() { return true; }

signals:
    void variableNumChanged(QString);

private:
    //图元区域范围
    QRectF mRect;
    mutable QRectF mBoundingRect;

    // 缩放比例
    double mdWidthScale;
    double mdheightScale;

    int8_t mType;   //元件类型

    QString mVariableNum;   //元件变量编号

    bool mSelectActive;   //元件选中状态
    bool mLastSwitchOn;   //元件前置信号接通状态
    bool mSwitchOn;       //元件信号接通状态

    IPlcBaseItem *mBranch;   //分支
};

#endif   // CPLCITEMCONTACT_H
